package threadjuc;

/**
 * @author zxl
 * @version 1.0
 * @date 2021/10/27 16:16
 */
public class Juc3 {
    /**
     * synchronized与lock的区别
     * 1，synchronized是内置关键字 lock是类
     * 2，synchronized无法判断锁的状态 lock可以判断是否获得了锁
     * 3，synchronized会自动释放锁
     * 4，synchronized的线程一获得锁后阻塞了，后面的线程会一直等待  lock锁不一定
     * 5，synchronized可重入锁，不可中断 非公平  lock可重入锁  可以判断 可自己设置公平非公平
     * 6，synchronized适合少量的代码同步  lock适合大量代码同步
     */

    /**
     * 锁的升级  最开始为无锁状态，当一个线程反复的获得锁，为了降低获取锁的代价，就会升级到偏向锁
     *         当此时出现了第二个线程想要获得该锁，会先判断上个线程是否释放了锁，如果释放了锁就会重新变成无锁状态，否则升级成轻量级锁，线程二进入自旋状态
     *         当这时出现第三条线程，而第一个线程还未释放锁，就会升级成为重量级锁
     */

    public static void main(String[] args) {

    }
}
